package gwtool.backend;

import gwtool.container.Benutzter;
import gwtool.container.DataSet;
import gwtool.container.OnlineLehrgangItem;
import gwtool.container.OnlinePruefungItem;

import java.util.ArrayList;
import java.util.List;

public class DataSetController {

	private LocalStoreController localStore = new LocalStoreController(this);

	private Comm comm = new Comm(this);

	private List<DataSet> dataSetsList = new ArrayList<>();

	private Benutzter nutzer = new Benutzter();

	public DataSetController() {

	}

	public void getDaten() {

		ladeLocal();
		comm.startOnlineUpdate(false);
	}

	public List<DataSet> getDataSetList() {

		return dataSetsList;
	}

	public void updateGui() {

	}

	public Comm getComm() {

		return comm;
	}

	public boolean hatChanges() {

		for (DataSet set : getDataSetList()) {
			if (set.isChanged()) {
				return true;
			}
		}
		return false;
	}

	public DataSet getEintragByDataSetId(int id) {

		for (DataSet set : getDataSetList()) {
			if (set.getId() == id) {
				return set;
			}
		}
		return null;
	}

	public void removeDataSetsWithChanges() {

		for (int i = 0; i < getDataSetList().size(); i++) {
			if (getDataSetList().get(i).isChanged()) {
				getDataSetList().remove(i);
				i--;
			}
		}
	}

	public List<OnlinePruefungItem> getAllePruefungen() {

		List<OnlinePruefungItem> list = new ArrayList<>();
		for (DataSet i : getDataSetList()) {
			if (i.getAktuellesDataItem() instanceof OnlinePruefungItem) {
				list.add((OnlinePruefungItem) i.getAktuellesDataItem());
			}
		}
		return list;
	}

	public boolean loginDatenKorrekt(Benutzter user) {

		if (comm.isUserInfoOK(user)) {
			nutzer = user;
			getDaten();
			return true;
		}
		return false;
	}

	public Benutzter getBenutzter() {

		return nutzer;
	}

	public void speichereLocal() {

		localStore.writeCache();
	}

	public void clearLocalCache() {

		comm.clearLoginCache();
		localStore.clearCache();
	}

	public void ladeLocal() {

		localStore.loadCache();
	}

	public void setDataSetsList(List<DataSet> dataSetsList) {

		this.dataSetsList = dataSetsList;
	}

	public void setNutzer(Benutzter nutzer) {

		this.nutzer = nutzer;
	}

	public List<OnlineLehrgangItem> getAlleLehrgaenge() {

		List<OnlineLehrgangItem> list = new ArrayList<>();
		for (DataSet i : getDataSetList()) {
			if (i.getAktuellesDataItem() instanceof OnlineLehrgangItem) {
				list.add((OnlineLehrgangItem) i.getAktuellesDataItem());
			}
		}
		return list;
	}
}
